package Leetcode第二期;

/**
 * @author : K k
 * @date : 14:06 2020/10/5
 */
public class 一次编辑_01_05 {

    public boolean oneEditAway(String first, String second) {
        int len1=first.length()-1;
        int len2=second.length()-1;
        int i=0;
        int j=len1,k=len2;
        if (Math.abs(len1-len2)>1){
            return false;
        }

        //从左至右
        while (i<=len1 && i<=len2 && first.charAt(i)==second.charAt(i)){
            //定位到不相等的位置
            ++i;
        }
        //从右至左
        while (j>=0 && k>=0 && first.charAt(j)==second.charAt(k)){
            j--;k--;
        }
        return j-i<1 && k-i<1;
    }

    public boolean oneEditAwayA(String first, String second) {
        if (first == null || second == null) return false;
        int len1 = first.length();
        int len2 = second.length();
        if (Math.abs(len1 - len2) > 1) return false;
        if (len2 > len1) return oneEditAwayA(second, first);

        // 保持第一个比第二个长
        for (int i = 0; i < len2; i++){
            if (first.charAt(i) != second.charAt(i)){
                // 如果是长度相同字符串，那就比较下一个，如果长度不一样，那就从该字符开始进行比较。
                return first.substring(i + 1).equals(second.substring(len1 == len2 ? i + 1 : i));
            }
        }
        return true;
    }
}
